package com.itzmn.newcode.offer1;

import java.util.Stack;

/**
 * @Author: 张梦楠
 * @Date: 2018/12/20 14:11
 * 简书：https://www.jianshu.com/u/d611be10d1a6
 * 码云：https://gitee.com/zhangqiye
 * @Description: 包含min函数的栈
 *
 *  定义栈的数据结构，请在该类型中实现一个能够得到栈中所含最小元素的min函数（时间复杂度应为O（1））。
 *
 *  思路：我们需要保存栈中的最小元素，当添加或者移除元素的时候，都要对数据维护
 *
 *  添加数据，如果比最小值小，维护起来，如果比数据大，将最小值再次维护一次
 *  删除数据，最小值也跟着删除
 *
 */
public class _20_StackContainingTheMinFunction {

    Stack<Integer> stack = new Stack();

    public static void main(String[] args) {

        new _20_StackContainingTheMinFunction().test();

    }

    private void test() {

    }

    public void push(int node) {

        if (stack.isEmpty()){
            stack.push(node);
        }else {
            Integer peek = stack.peek();
            if (node>=peek){
                stack.push(peek);
            }else {
                stack.push(node);
            }
        }

    }

    public void pop() {

        stack.pop();
    }

    public int top() {

        return stack.peek();
    }

    public int min() {

        return stack.peek();
    }


}
